#include "../games/globale.h" // Fonction et Headers globaux
#include "../games/cls_configuration.h" // Classe de gestion du fichier de configuration

#include <unistd.h>

int cls_Configuration::windowHeight=0;
int cls_Configuration::windowWidth=0;
int cls_Configuration::gameLanguage=-1;
int cls_Configuration::fullScreen=-1;
int cls_Configuration::flgDebugTrace=-1;

/* ----------------------------------------------------
			Constructeur
  ----------------------------------------------------- */
cls_Configuration::cls_Configuration()
{
    debugTrace("Constructeur cls_Configuration");
}

/* ----------------------------------------------------
			Destructeur
  ----------------------------------------------------- */
cls_Configuration::~cls_Configuration()
{
    debugTrace("Destructeur cls_Configuration");
}


void cls_Configuration::init()
{


    /*   FAQ
    http://cpp.developpez.com/faq/cpp/
    http://www.progmatique.fr/article-9-String.html
    */
    ifstream fileConfiguration;
    ofstream saveConfigFile;
    string s_FileLine;
    string s_KeyWord;
    istringstream iss_FluxConvertion;
    int n_ParamConvertionInt;


    string s_FileName;
    string s_FilePath;


    // Vérification de l'existance du repertoire de configuration
    #ifdef WIN32
    s_FilePath=join_pathFile(getenv("APPDATA"), ".les_aventures_de_max");
    #else
    s_FilePath=join_pathFile(getenv("HOME"), ".les_aventures_de_max");
    #endif
    if(access(s_FilePath.c_str(), R_OK))
    {
        // Si le répertoire n'existe pas, on le créer
        #ifdef WIN32
        if( mkdir(s_FilePath.c_str()) == -1 )
        {
        #else
        if( mkdir(s_FilePath.c_str(), 0755) == -1 )
        {
        #endif
            debugTrace("mkdir [ERREUR]");
        }
    }

    // Création de la variable contenant le fichier de configuration
    s_FileName=join_pathFile(s_FilePath, "game.cfg");


    fileConfiguration.open(s_FileName.c_str());
    if (fileConfiguration) // ce test échoue si le fichier n'est pas ouvert
    {
        while(getline(fileConfiguration, s_FileLine))
        {
            if(s_FileLine.substr(0, 2) != "//")
            {
                // -----------------------------------
                // WIDE_SCREEN PARAMETER
                // -----------------------------------
                s_KeyWord=CONFIG_WIDE___NAME;
                if((int)s_FileLine.find(s_KeyWord, 0) != -1)
                {
                    // Convertion de la chaine récupérer en entier
                    istringstream iss_FluxConvertion(s_FileLine.substr(s_KeyWord.length()));
                    iss_FluxConvertion >> n_ParamConvertionInt;
                    switch(n_ParamConvertionInt)
                    {
                        case CONFIG_WIDE_IS:
                            windowHeight = WIDE_WINDOW_HEIGHT;
                            windowWidth = WIDE_WINDOW_WIDTH;
                            break;

                        case CONFIG_WIDE_NOT:
                        default:
                            windowHeight = NORM_WINDOW_HEIGHT;
                            windowWidth = NORM_WINDOW_WIDTH;
                            break;
                    }
                }

                // -----------------------------------
                // FULLSCREEN PARAMETER
                // -----------------------------------
                s_KeyWord=CONFIG_FULL___NAME;
                if((int)s_FileLine.find(s_KeyWord, 0) != -1)
                {
                    // Convertion de la chaine récupérer en entier
                    istringstream iss_FluxConvertion(s_FileLine.substr(s_KeyWord.length()));
                    iss_FluxConvertion >> n_ParamConvertionInt;
                    switch(n_ParamConvertionInt)
                    {
                        case CONFIG_FULL_IS:
                            fullScreen = CONFIG_FULL_IS;
                            break;

                        case CONFIG_FULL_NOT:
                        default:
                            fullScreen = CONFIG_FULL_NOT;
                            break;
                    }
                }

                // -----------------------------------
                // DEBUG_TRACE PARAMETER
                // -----------------------------------
                s_KeyWord=CONFIG_DBUG___NAME;
                if((int)s_FileLine.find(s_KeyWord, 0) != -1)
                {
                    // Convertion de la chaine récupérer en entier
                    istringstream iss_FluxConvertion(s_FileLine.substr(s_KeyWord.length()));
                    iss_FluxConvertion >> n_ParamConvertionInt;
                    switch(n_ParamConvertionInt)
                    {
                        case CONFIG_FULL_IS:
                            flgDebugTrace = CONFIG_DBUG_HAVE;
                            break;

                        case CONFIG_FULL_NOT:
                        default:
                            flgDebugTrace = CONFIG_DBUG_NOT;
                            break;
                    }
                }

                // -----------------------------------
                // LANGUAGE PARAMETER
                // -----------------------------------
                s_KeyWord=CONFIG_LANG___NAME;
                if((int)s_FileLine.find(s_KeyWord, 0) != -1)
                {

                    if(s_FileLine.substr(s_KeyWord.length()).compare(CONFIG_LANG_FR)==0)
                    {
                        gameLanguage = CONFIG_LANG_FR_CODE;
                    }
                    else if(s_FileLine.substr(s_KeyWord.length()).compare(CONFIG_LANG_EN)==0)
                    {
                        gameLanguage = CONFIG_LANG_EN_CODE;
                    }
                }
            }
        }
    }
    else
    {
        // On définit les valeurs par défauts
        windowHeight = NORM_WINDOW_HEIGHT;
        windowWidth = NORM_WINDOW_WIDTH;
        fullScreen = CONFIG_FULL_NOT;
        gameLanguage = CONFIG_LANG_FR_CODE;
        flgDebugTrace = CONFIG_DBUG_NOT;

        // http://cpp.developpez.com/faq/cpp/?page=fichiers
        // On écrit le fichier de configuration avec les valeurs par défault
        //ofstream saveConfigFile("youpi/game.cfg", ios::app);
        saveConfigFile.open(s_FileName.c_str());
        //saveConfigFile.open("T:\\youpi\\game.cfg");
        saveConfigFile << "[full_screen]=" << fullScreen << "\n";
        saveConfigFile << "[wide_screen]=" << 0 << "\n";
        saveConfigFile << "[debug_trace]=" << flgDebugTrace << "\n";
        saveConfigFile << "[language]=" << CONFIG_LANG_FR << "\n";
        saveConfigFile.close();
    }

    fileConfiguration.close();

}

int cls_Configuration::getWindowHeight()
{
    return windowHeight;
}

int cls_Configuration::getWindowWidth()
{
    return windowWidth;
}

int cls_Configuration::getLanguage()
{
    return gameLanguage;
}

int cls_Configuration::isFullScreen()
{
    return fullScreen;
}

int cls_Configuration::haveDebugTrace()
{
    return flgDebugTrace;
}
